// 1. 引入wechat-http
import http from 'wechat-http'

// 2. 配置基础路径
http.baseURL = 'https://live-api.itheima.net'

// 3. 配置请求拦截器
http.intercept.request = (options) => {
  // 3.0 获取token
  const { token } = getApp()
  // 3.1 创建一个默认的请求头对象
  const defaultHeader = {}
  // 3.2 判读token是否有值, 有则添加到请求头
  if (token) defaultHeader.Authorization = token
  // 3.3 把默认的请求头和页面发过来的请求头合并
  options.header = Object.assign(defaultHeader, options.header)
  return options
}

// 4. 配置响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  const app = getApp()
  // 4.1 判断状态码是否为401
  if (statusCode === 401) {
    // 4.0 判断请求的地址中是否包含refreshToken
    // 如果包含, 则意味refreshToken也失效了, 此时, 应该拦截到登录页
    if (config.url.includes('refreshToken')) {
      // 4.0.1 获取当前的页面栈
      const currentStacks = getCurrentPages()
      // 4.0.2 获取当前的页面对象
      const currentPage = currentStacks[currentStacks.length - 1]
      // 4.0.3 获取当前页面对象的路径
      const currentRoute = currentPage.route
      // 4.0.4 引导到登录页面
      return wx.redirectTo({
        url: '/pages/login/index?redirectURL=/' + currentRoute,
      })
    }
    // 4.2 发请求延迟token的失效
    const res = await wx.http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refresh_token,
      },
    })
    // 4.3 取出token和refresh_token去更新本地和全局
    app.setToken(res.data.token, res.data.refreshToken)

    // 4.4 把之前的请求再重新发送一次
    console.log(config, app.token)
    // 注意: config是之前的请求对象
    // 需要把之前请求对象中的header中的Authorization更新掉
    return wx.http(
      Object.assign(config, {
        header: { Authorization: app.token },
      })
    )
  }
  return data
}

// 5. 挂载到wx全局空间
wx.http = http

// 6. 默认导出
export default http
